package banco.negocio;

import banco.dados.RepositorioContas;
import banco.dados.RepositorioContasArray;
import banco.negocio.excecoes.AtributoInvalidoException;
import banco.negocio.excecoes.ContaExistenteException;
import banco.negocio.excecoes.SaldoInvalidoException;
import junit.framework.TestCase;

public class CadastroContaTest extends TestCase {
	private RepositorioContas rep;
	private CadastroConta cad;
	Cliente cliJoao, cliMaria;
	Conta contaExistente, contaInexistente;
	
	protected void setUp() throws Exception {
		super.setUp();

		// configurar 
		rep = new RepositorioContasArray();
		cad = new CadastroConta(rep);
		cliJoao = new Cliente ("joao", "123");
		contaExistente = new Conta("345", cliJoao);
		contaExistente.setSaldo(1000);
		cad.inserir(contaExistente);
		cliMaria = new Cliente ("maria", "45345");		
		contaInexistente = new Conta("346", cliMaria);
		contaInexistente.setSaldo(2000);				
	}

	protected void tearDown() throws Exception {
		super.tearDown();
	}
	
	public void testInserirJaExistente() throws Exception {
		//invocar classe sob teste
		try {
			cad.inserir(contaExistente);
			fail();
		} catch (SaldoInvalidoException e) {
			fail();
		} catch (ContaExistenteException e) {
			// sucesso
			;
		}

	}	

	public void testInserir() throws AtributoInvalidoException {
		try {
			cad.inserir(contaInexistente);
		} catch (SaldoInvalidoException e) {
			fail();
		} catch (ContaExistenteException e) {
			fail();
		}
		
		//verificacao
		assertTrue( cad.existe( contaInexistente.getNumero()));
	}
	
	

	public void testAtualizar() {
		fail("Not yet implemented");
	}
	
	
	
	public void testInserirSaldoInsulficiente() {
		fail("Not yet implemented");
	}		

	public void testRemover() {
		fail("Not yet implemented");
	}

}
